import getFieldsDescrible from '../../utils/form-fields-desc';
import getIndexConfigDescrible from '../../utils/index-config-desc';
import getPageParamKeysDescrible from '../../utils/page-param-keys-desc';
import getRequestConfigDescrible from '../../utils/request-config-desc';
import fieldTypes from '../../utils/field-types-desc';

const fieldType = fieldTypes.find(({ code }) => code === 'table') || {};

export default {
    attributes: [
        {
            params: 'v-model',
            des: '绑定值',
            type: fieldType.valueType,
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'formated-value',
            des: '当你配置了 requestConfig 自动请求获取列表数据，并且需要设置初始选中某些数据行，而恰好你绑定的 v-model 的初始值为数据行 rowKey 组成的数组。那么此时你可能就需要通过配置该字段来展示输入框内的初始文本了',
            type: 'String',
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'props',
            des: '表单元素配置; 详细配置请查看下方【props 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    configList: [
                        {
                            params: 'type',
                            des: `表单项控件的类型(此控件的 type 固定为 "${fieldType.code}")`,
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'value',
                            des: '表单项控件的默认值，若绑定值为空，将获取该值作为初始值',
                            type: fieldType.valueType,
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'size',
                            des: '尺寸大小',
                            type: 'String',
                            values: '"large" | "default" | "small"',
                            defaultVal: '"default"',
                        },
                        {
                            params: 'disabled',
                            des: '是否禁用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'dialogTitle',
                            des: '弹窗标题',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'dialogWidth',
                            des: '弹窗宽度',
                            type: 'String | Number',
                            values: '-',
                            defaultVal: '500px',
                        },
                        {
                            params: 'placeholder',
                            des: '输入框占位提示',
                            type: 'String',
                            values: '-',
                            defaultVal: '"请选择"',
                        },
                        {
                            params: 'clearable',
                            des: '是否展示清空图标',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'required',
                            des: '点击确认时是否校验必须至少选择一条数据',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'confirmText',
                            des: '弹窗提交按钮文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"确认"',
                        },
                        {
                            params: 'cancelText',
                            des: '弹窗取消按钮文案',
                            type: 'String',
                            values: '-',
                            defaultVal: '"取消"',
                        },
                        {
                            params: 'multiple',
                            des: '是否多选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'indexConfig',
                            des: '列表首列配置项; 详细配置请查看下方【indexConfig 配置项】',
                            type: 'Object',
                            values: '-',
                            defaultVal: '{ label: "序号", type: "index", width: 60 }',
                            details: [
                                {
                                    title: '配置项【indexConfig】',
                                    describes: ['用于设置列表首列的类型及相关特殊化配置'],
                                    configList: getIndexConfigDescrible('picker'),
                                },
                            ],
                        },
                        {
                            params: 'searchConfig',
                            des: '列表查询模块配置项; 详细配置请查看下方【searchConfig 配置项】',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【searchConfig】',
                                    describes: ['用于设置列表查询模块相关功能的配置字段'],
                                    configList: getFieldsDescrible('picker'),
                                },
                            ],
                        },
                        {
                            params: 'tableColumn',
                            des: '表格列的配置项; 详细配置请参阅【Form】组件的 tableColumn 属性',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'options / tableData',
                            des: '列表数据（若配置了requestConfig，则该字段会被自动忽略）',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'requestConfig',
                            des: '通过接口请求表格数据的配置；详情请查阅下方说明',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【requestConfig】',
                                    describes: [
                                        '除以下字段外，requestConfig 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                                    ],
                                    configList: getRequestConfigDescrible('table'),
                                },
                            ],
                        },
                        {
                            params: 'pageParamKeys',
                            des: '组件内部在通过接口请求数据时，默认会把排序和分页相关的字段也组装到接口参数内，如果后台接口的分页、排序字段的 key 和组件内默认的不一致，那么你可以通过 pageParamKeys 来替换这些字段的key；',
                            type: 'Object',
                            values: '-',
                            defaultVal: '请查阅下方【pageParamKeys 配置项】说明',
                            details: [
                                {
                                    title: '配置项【pageParamKeys】',
                                    describes: [
                                        'pageParamKeys 用于指定分页、排序的字段名，以及排序规则升序/降序的值',
                                    ],
                                    configList: getPageParamKeysDescrible(),
                                },
                            ],
                        },
                        {
                            params: 'optionProps',
                            des: '配置选项，具体看下表',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【optionProps】',
                                    describes: ['用于指定数据行相关功能性字段对应的字段编码，以及指定选中的数据行展示值的字段'],
                                    configList: [
                                        {

                                            params: 'label',
                                            des: '选择数据行后，展示在输入框内的文字对应的编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"name"',
                                        },
                                        {
                                            params: 'value',
                                            des: '指定数据行唯一键所对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"id"',
                                        },
                                        {

                                            params: 'hasChildren',
                                            des: '指定数据行是否存在子行（展示展开按钮）对应的字段编码，在 lazy 为 true 时有效',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"hasChildren"',
                                        },
                                        {
                                            params: 'children',
                                            des: '指定子数据行对应的字段编码',
                                            type: 'String',
                                            values: '-',
                                            defaultVal: '"children"',
                                        },
                                    ],
                                },
                            ],
                        },
                        {
                            params: 'refreshOnReset',
                            des: '是否支持点击重置按钮时刷新列表',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'showPagination',
                            des: '是否需要分页控件',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'isRefresh',
                            des: '是否需要手动刷新列表按钮（配置 requestConfig 时生效）',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'layout',
                            des: '分页配置',
                            type: 'String',
                            values: 'sizes, prev, pager, next, jumper, ->, total, slot',
                            defaultVal: '\'total, sizes, prev, pager, next, jumper\'',
                        },
                        {
                            params: 'pageSize',
                            des: '每页显示条目个数',
                            type: 'Number',
                            values: '-',
                            defaultVal: '5',
                        },
                        {
                            params: 'pageSizes',
                            des: '每页显示个数选择器的选项设置',
                            type: 'Array',
                            values: '-',
                            defaultVal: '[5,, 10, 20]',
                        },
                        {
                            params: 'stripe',
                            des: '是否为斑马纹列表',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'border',
                            des: '表格是否带有纵向边框',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'unit',
                            des: '控件尾部的单位文案配置',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                    ],
                },
            ],
        },
    ],
    events: [
        {
            name: 'change',
            des: '绑定值修改后触发的事件',
            params: '({ value, label, data }, props)',
        },
        {
            name: 'clear',
            des: '点击清空图标，清空输入框的值后抛出的事件',
            params: '(value, props)',
        },
    ],
    slots: [
        {
            name: 'prepend',
            des: '输入框前置内容',
            params: '-',
        },
        {
            name: 'append',
            des: '输入框后置内容',
            params: '-',
        },
    ],
    refs: [],
};
